#include<stdio.h>//printf("");的头文件
#include<stdlib.h>//system("");的头文件
#include<Windows.h>//Sleep();的头文件
#include<conio.h>//getch();的头文件
int m1ain(void)
{
    printf("欢迎来到迷宫小游戏\n");//介绍这个迷宫游戏
    printf("操作方式:\nw为往上走\ns为往下走\na为往左走\nd为往右走\n");//介绍操作方式
    char map[50][50] = {
                        "######",//申请50*50的二维字符串当迷宫地图,但这里是6*6的地图
                        "#O #  ",//'#'是墙(不可以走的地方)
                        "# ## #",//'O'是起点(可控制)
                        "#  # #",//' '是空气(可以走的地方)
                        "##   #",
                        "######",//横竖都是012345,012345(数组下标从0开始)
    };
    int i, x, y, p, q;//x,y为小球(起点"O")初始位置竖横轴 
                  //p,q为空白(终点" ")结束位置竖横轴
    int ch;//申请需要输入的字符(名称是ch),当移动(w,a,s,d)
    x = 1; y = 1; p = 1; q = 5;//x为竖轴初始位置为1,y为初始横轴位置为1
                    //p为竖轴结束位置为1,q为结束横轴位置为5
    for (i = 0; i < 6; i++)//从0到5,共进行了6次循环,依次输出迷宫的第0至5行
        puts(map[i]);//表示输出每一行的字符串
    while (x != p || y != q)//只要x的值不等p或y的值不等q就无限循环   
    {
        ch = getch();//这语句表示给ch变量输入的字符可以立即被程序获取(不用按任意键继续),也不会回显
        if (ch == 's')//判断你是否输入(按)'s'这个字符
        {
            if (map[x + 1][y] != '#')//确认输入(按)的是's'时,就执行[x+1][y](往下走,x为竖轴,+1为往下,y不变),提前是还要判断往下走是否为'#'(墙)
            {
                map[x][y] = ' ';//确认往下走不是墙时,把当前的'O'输出成' '
                x++;//为向下走
                map[x][y] = 'O';//确认往下走不是墙时,把下一步的' '输出成'O'
            }
        }
        if (ch == 'w')//判断你是否输入(按)'w'这个字符
        {
            if (map[x - 1][y] != '#')//确认输入(按)的是'w'时,就执行[x-1][y](往上走,x为竖轴,-1为往上,y不变),提前是还要判断往下走是否为'#'(墙)
            {
                map[x][y] = ' ';//确认往上走不是墙时,把当前的'O'输出成' '
                x--;//为向上走
                map[x][y] = 'O';//确认往上走不是墙时,把下一步的' '输出成'O'
            }
        }
        if (ch == 'a')//判断你是否输入(按)'a'这个字符
        {
            if (map[x][y - 1] != '#')//确认输入(按)的是'a'时,就执行[x][y-1](往左走,y为横轴,-1为往左,x不变),提前是还要判断往下走是否为'#'(墙)
            {
                map[x][y] = ' ';//确认往左走不是墙时,把当前的'O'输出成' '
                y--;//为向左走
                map[x][y] = 'O';//确认往左走不是墙时,把下一步的' '输出成'O'
            }
        }
        if (ch == 'd')//判断你是否输入(按)'d'这个字符
        {
            if (map[x][y + 1] != '#')//确认输入(按)的是'd'时,就执行[x][y-1](往右走,y为横轴,+1为往右,x不变),提前是还要判断往下走是否为'#'(墙)
            {
                map[x][y] = ' ';//确认往右走不是墙时,把当前的'O'输出成' '
                y++;//为向右走
                map[x][y] = 'O';//确认往右走不是墙时,把下一步的' '输出成'O'
            }
        }
        system("cls");//每次移动了小球就清屏一次
        for (i = 0; i < 6; i++)//清屏了再次循环输出新的地图
            puts(map[i]);//清屏了再次输出新的地图
    }
    system("cls");//最后通关后清屏
    printf("恭喜你赢了!\n");//最后通关后提示输出语句
    Sleep(5000);//上面代码全部执行完毕后过五秒自动关闭程序
    return 0;
}